from config.database import db

class Camera(db.Model):
    id = db.Column(db.BigInteger, primary_key=True)
    # 摄像头id
    camera_id = db.Column(db.String(80), nullable=True)
    # 摄像头名称
    name = db.Column(db.String(80), nullable=True)
    # 摄像头视频路径
    video_url = db.Column(db.String(240), nullable=True)
    # 截图存储路径
    screenshot_url = db.Column(db.String(240), nullable=True)
    # 录像存储路径
    video_path = db.Column(db.String(240), nullable=True)
    # 报警抓拍存储路径
    alarm_screenshot_url = db.Column(db.String(240), nullable=True)
    # IR参数 - 发射率
    reflection_rate = db.Column(db.String(120), nullable=True)
    # IR参数 - 反射温度
    reflection_temperature = db.Column(db.String(120), nullable=True)
    # IR参数 - 环境温度
    environment_temperature = db.Column(db.String(120), nullable=True)
    # IR参数 - 相对湿度
    relative_humidity = db.Column(db.String(120), nullable=True)
    # IR参数 - 测温距离
    temperature_distance = db.Column(db.String(120), nullable=True)
    # 增益
    gain = db.Column(db.String(120), nullable=True)
    # 模式 (可见光模式、紫外模式、红外模式、紫外+可见光融合模式、红外+紫外融合模式、紫外+红外+可见光融合) 枚举
    # 枚举值：
    # 1. 可见光模式
    # 2. 紫外光模式
    # 3. 红外模式
    # 4. 紫外光+可见光融合模式
    # 5. 红外+紫外融合模式
    # 6. 紫外光+红外+可见光融合
    mode = db.Column(db.INTEGER, nullable=True)
    # 电晕颜色 (12种)
    color = db.Column(db.String(120), nullable=True)
    # 报警设置 - 紫外光子数
    ir_photons = db.Column(db.String(120), nullable=True)
    # 报警设置 - 红外温度
    ir_temperature = db.Column(db.String(120), nullable=True)
    # 转动速度
    speed = db.Column(db.String(120), nullable=True)
    # 排序
    sort = db.Column(db.INTEGER, nullable=True)


    def __repr__(self):
        return f'<Camera {self.name}>'

    def to_dict(self):
        return {
            'id': self.id,
            'camera_id': self.camera_id,
            'name': self.name,
            'video_url': self.video_url,
            'screenshot_url': self.screenshot_url,
            'video_path': self.video_path,
            'alarm_screenshot_url': self.alarm_screenshot_url,
            'reflection_rate': self.reflection_rate,
            'reflection_temperature': self.reflection_temperature,
            'environment_temperature': self.environment_temperature,
            'relative_humidity': self.relative_humidity,
            'temperature_distance': self.temperature_distance,
            'gain': self.gain,
            'mode': self.mode,
            'color': self.color,
            'ir_photons': self.ir_photons,
            'ir_temperature': self.ir_temperature,
            'speed': self.speed,
            'sort': self.sort
        }


# 预置点
class Preset(db.Model):
    id = db.Column(db.BigInteger, primary_key=True)
    camera_id = db.Column(db.String(80), nullable=True)
    uid = db.Column(db.String(80), nullable=True)
    name = db.Column(db.String(80), nullable=True)

    def __repr__(self):
        return f'<Preset {self.name}>'

    def to_dict(self):
        return {
            'id': self.id,
            'camera_id': self.camera_id,
            'uid': self.uid,
            'name': self.name
        }


# 路径巡航
class Path(db.Model):
    id = db.Column(db.BigInteger, primary_key=True)
    camera_id = db.Column(db.String(80), nullable=True)
    # 预置点ids，逗号分割
    preset_ids = db.Column(db.String(255), nullable=True)
    # 巡航间隔
    interval = db.Column(db.String(80), nullable=True)

    def __repr__(self):
        return f'<Path {self.name}>'

    def to_dict(self):
        return {
            'id': self.id,
            'camera_id': self.camera_id,
            'preset_ids': [int(pid) for pid in self.preset_ids.split(',') if pid.isdigit()],
            'interval': self.interval
        }

# websocket的消息
class WebsocketMessage(db.Model):
    id = db.Column(db.BigInteger, primary_key=True)
    camera_id = db.Column(db.String(80), nullable=True)
    # 冗余报警设置的光子数
    alarm_photons = db.Column(db.String(80), nullable=True)
    # 冗余报警设置的温度
    alarm_temperature = db.Column(db.String(80), nullable=True)
    # 冗余实时增益
    gain = db.Column(db.String(80), nullable=True)
    # 光子数
    ir_photons = db.Column(db.String(80), nullable=True)
    # 温度
    ir_temperature = db.Column(db.String(80), nullable=True)
    # 时间
    date = db.Column(db.String(80), nullable=True)
    # 是否告警
    alarm = db.Column(db.Integer, default=0, nullable=False)

    def __repr__(self):
        return f'<Websocket {self.camera_id}>'

    def to_dict(self):
        return {
            'id': self.id,
            'camera_id': self.camera_id,
            'alarm_photons': self.alarm_photons,
            'alarm_temperature': self.alarm_temperature,
            'gain': self.gain,
            'ir_photons': self.ir_photons,
            'ir_temperature': self.ir_temperature,
            'date': self.date,
            'alarm': self.alarm
        }
